<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<!-- 
    回调函数是作为一个参数传递给宿主函数的函数
    浏览器为js开辟的三大异步线程（任务）：http请求线程，浏览器定时触发器。浏览器触发线程。
    所有同步任务都在主任务队列。形成一个执行栈，存在于主线程
    所有等待队列（任务队列）都是异步任务。
    异步任务有定时器任务 ajax任务，dom事件任务。
    等待队列里面存的是回调函数。
    主线程把所有的主任务队列事件（函数）执行完，主线程自动执行等待任务队列。实际上就是执行对应的回调函数。
    异步任务必须指定回调函数。回调函数供主线程调用。



 -->

<body>
    <script>
        // setTimeout（）是定时器函数 setTimeout(callback,time)，callback的宿主函数就是setTimeout。this是window.主任务队列到了10ms,就会把
        // callback拉出来执行。
        // 定时器是异步。里面回调函数
        // 创建了5个不同定时器。定时器里面回调函数是异步，但是定时器函数本身放在主任务队列是同步。调用定时器就会返回一个id结果
        for (var i = 0; i < 5; i++) {
            setTimeout((function (i) {
                console.log(i);
            })(i), i * 1000);
        }
        console.log(21365)
    </script>
</body>

</html>